package com.hn658.base.message.group.business;

import java.util.List;
import java.util.Map;

import com.hn658.base.message.group.entity.GroupEO;
import com.hn658.base.message.group.entity.MemberEO;
import com.hn658.framework.dataaccess.pagination.GenericPage;


/**
 * 群管理
 */
public interface IGroupManager {
	/**
	 * 创建群兼容老版本
	 * @param groupEO
	 * @param nickName
	 * @return GroupEO
	 */
	public GroupEO  createGroup(GroupEO groupEO,String nickName);
	/**
	 * 加入群
	 * @param appId
	 * @param groupId
	 * @param uid
	 * @param nickName
	 * @return
	 */
	public GroupEO joinGroup(String appId,Long groupId,String uid);
	
	/**
	 * 分页查询群成员
	 * @param groupId
	 */
	public GenericPage<MemberEO> queryGroupMembers(String appId,Long groupId, int index,int pageSize,String orderBy,boolean isAsc);
	
	/**
	 * 查询群成员
	 * @param appId
	 * @param groupId
	 * @return
	 */
	public List<MemberEO> queryGroupMemberList(String appId,Long groupId);
	/**
	 * 获取我的群列表
	 */
	//public GenericPage<GroupEO> getMyGroups(String appId,Long uid, int index,int pageSize);
	
	/**
	 * 退出群
	 * @param groupId
	 */
	public void exitTheGroup(String appId,Long groupId,String uid);

	
	/**
	 * 根据应用id和群id获取群信息
	 * @param groupId
	 * @return GroupEO
	 */
	GroupEO findGroup(String appId,Long groupId);
	
	/**
	 * 更新群信息
	 * @param GroupEO
	 */
	public void updateGroup(GroupEO groupEO);
	
	
	/**
	 * 验证该用户是否加入群
	 * @param groupId
	 * @param Long uid
	 * @return result
	 */
	 boolean isGroupMember(String appId,Long groupId, String uid);
	 
	 /**
	  * 获取符合条件的所有群列表
	  */
	public GenericPage<GroupEO> getGroups(Map<String, Object> queryMap,int index, int pageSize);
	
	/**
	 * 获取同一应用下的所有群列表
	 */
	public GenericPage<GroupEO> getAllGroupsByAppId(String appId,int index, int pageSize);
	
	/**
	 * 解散群
	 * @param appId 应用id
	 * @param groupId 群id
	 * @param uid  用户id
	 */
	public void disbandGroups(String appId,Long groupId,String uid);
	
	/**
	 * 查询群成员数量
	 * @param appId
	 * @param groupId
	 * @return
	 */
	public int numMemberByGroup(String appId,Long groupId);
	
	/**
	 * 查询群成员ID列表
	 * @param appId
	 * @param groupId
	 * @return
	 */
	public List<String> queryGroupMemberIds(String appId, Long groupId);
}
